/**
 * <p>Copyright: Copyright (c) 2014</p>
 * <p>Company: UMP Technology Co. Ltd</p>
 * <p>2014年5月29日</p>
 * @author Zhang Wensheng
 */
package com.xianl.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * desc: 
 * @author Zhang Wensheng
 * date:2014年5月29日
 */
public class PropsUtil {
	
	private static Logger logger = LoggerFactory.getLogger(PropsUtil.class);

	private static final String[] files = { 
			"keyPattern.properties",
			"retMsg.properties",
			"platConfig.properties", 
			"reqKeys.properties", 
			"resKeys.properties", 
			"rotate.properties"};
	private static Properties properties = new Properties();
	private static long refreshInterval = 1000*60;// 5分钟钟刷新配置文件
	private static Map<String, Long> modMap = new HashMap<String, Long>();
	public static long lastTime = System.currentTimeMillis();

	static {
		load();
	}

	/**
	* desc: 加载配置文件
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:02:03 
	*/
	private static void load() {
		File configFile = null;
		InputStream in = null;
		for (String file : files) {
			URL url = PropsUtil.class.getClassLoader().getResource("config/"+file);
			configFile = new File(URLDecoder.decode(url.getPath()));
			long lastModifiedTime = configFile.lastModified();
			Long oldModifiedTime = modMap.get(file);
			if (oldModifiedTime != null && lastModifiedTime == oldModifiedTime.longValue()){
				continue;
			}
			modMap.put(file, lastModifiedTime);
			try {
				in = new FileInputStream(configFile);
				properties.load(in);
				in.close();
			} catch (IOException e) {
				logger.error("加载配置文件异常", e);
			} finally {
				if (in != null) {
					try {
						in.close();
					} catch (IOException e) {
						logger.error("加载配置文件时，关闭输入流异常", e);
					}
					in = null;
				}
			}
		}
	}

	/**
	* desc: 
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:01:59 
	*/
	private static void reflesh() {
		long now = System.currentTimeMillis();
		if (now - lastTime > refreshInterval) {
			load();
			lastTime = now;
		}
	}

	/**
	* desc: 
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:01:58 
	* @param key
	* @return
	*/
	public static String getMsgTrim(String key) {
		return StringUtils.trimToNull(getMessage(key));
	}
	
	/**
	* desc: 
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:12:08 
	* @param key
	* @param defaultValue
	* @return
	*/
	public static String getMsgTrim(String key, String defaultValue){
		return StringUtils.trimToNull(getMessage(key, defaultValue));
	}
	
	/**
	* desc: 
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:07:17 
	* @param key
	* @param defaultValue
	* @return
	*/
	public static String getMessage(String key, String defaultValue){
		reflesh();
		return properties.getProperty(key, defaultValue);
	}
	
	/**
	* desc: 
	* @author: Zhang Wensheng ,  2014年5月29日 下午12:06:00 
	* @param key
	* @return
	*/
	public static String getMessage(String key){
		reflesh();
		return properties.getProperty(key);
	}
	
	public static String getMessage(String key, Object[] args){
		reflesh();
		if(properties.containsKey(key)){
			return String.format(properties.getProperty(key), args);
		}else{
			return null;
		}
	}
}
